package com.test.work;

/**
 * @author Cc
 * 2024-03-22
 */
public class AppleTree {
    /**
     * 苹果
     */
    private int apples;

    public synchronized void put() {
        // 当篮子已经满了，则男孩子需要等待，等待女孩子通知
        if (apples == 100) {
            try {
                // 通知女孩子吃水果
                this.notify();

                // 当执行到此行代码时，后面的代码不会往下执行 -- 直到女孩子的通知才往下执行
                this.wait();


            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        // 把水果放到篮子中
        apples++;

        // 男孩子摘水果
        System.out.println("篮子当前容量：" + apples + "，男孩子" + "摘苹果");

        // 睡眠半秒,便于理解程序
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    /**
     * 女孩子吃水果
     */
    public synchronized void take() {
        // 当篮子已经空了，则女孩子需要等待，等待男孩子通知
        if (apples < 100) {
            try {
                // 通知男孩子摘水果
                this.notify();

                // 当执行到此行代码时，后面的代码不会往下执行 -- 直到男孩子的通知才往下执行
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        // 获取容器中的水果
        apples--;

        // 女孩子吃水果
        System.out.println("篮子当前容量：" + apples + "，女孩子" + "吃苹果");

        // 睡眠半秒,便于理解程序
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
